package com.gxc.hash;

import java.util.*;

/**
 * 一个文件目录的数据格式为：目录id，本目录中文件大小，(子目录id列表）。
 *
 * 其中目录id全局唯一，取值范围[1, 200]，本目录中文件大小范围[1, 1000]，子目录id列表个数[0,10]例如 : 1 20 (2,3) 表示目录1中文件总大小是20，有两个子目录，id分别是2和3
 *
 * 现在输入一个文件系统中所有目录信息，以及待查询的目录 id ，返回这个目录和及该目录所有子目录的大小之和。
 *
 * 输入描述
 * 第一行为两个数字M，N，分别表示目录的个数和待查询的目录id,
 *
 * 1 ≤ M ≤ 100
 * 1 ≤ N ≤ 200
 * 接下来M行，每行为1个目录的数据：
 *
 * 目录id 本目录中文件大小 (子目录id列表)
 *
 * 子目录列表中的子目录id以逗号分隔。
 *
 * 输出描述
 * 待查询目录及其子目录的大小之和
 */
public class Folder {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int g = scanner.nextInt();
        scanner.nextLine();

        Map<Integer, List<Integer>> childMap = new HashMap<>();
        Map<Integer, Integer> sizeMap = new HashMap<>();
        for (int i = 0; i < n; i++) {
            String s = scanner.nextLine();
            String[] split = s.split(" ");
            int id = Integer.parseInt(split[0]);
            int size = Integer.parseInt(split[1]);
            if (split[2].length() > 2) {
                String child = split[2].substring(1, split[2].length()-1);
                String[] split1 = child.split(",");
                List<Integer> list = new ArrayList<>();
                for (int j = 0; j < split1.length; j++) {
                    list.add(Integer.parseInt(split1[j]));
                }
                childMap.put(i, list);
            }
            sizeMap.put(id, size);
        }
        scanner.close();

        System.out.println(DFS(sizeMap, childMap, g));
    }

    private static int DFS(Map<Integer, Integer> sizeMap, Map<Integer, List<Integer>> childMap, int index) {
        int res = sizeMap.get(index);
        List<Integer> childIds = childMap.getOrDefault(index, new ArrayList<>());
        for (int i = 0; i < childIds.size(); i++) {
            Integer next = childIds.get(i);
            res += DFS(sizeMap, childMap, next);
        }
        return res;
    }
}
